package com.xtx.air.bo.flight;

import java.util.List;
import java.util.Map;

import com.xtx.air.dataobject.FlightDO;
import com.xtx.air.dataobject.FlightStorageDO;

/**
 * 航班信息业务接口
 * 
 * @author lenic
 * @date 2012-02-28
 */
public interface IFlightBO {

	/**
	 * 添加航班信息
	 * 
	 * @param flightDO
	 */
	boolean addFlight(FlightDO flightDO);

	/**
	 * 更新航班信息
	 * 
	 * @param flightDO
	 */
	boolean updateFlight(FlightDO flightDO);

    /**
     * 添加航班以及库存信息
     * @param flightDO
     * @param storageDOList
     * @return
     */
    void addFlightAndStorage(FlightDO flightDO,List<FlightStorageDO> storageDOList);

    /**
     * 批量更新某一个航班下的库存
     * @param fid
     * @param storageDOList
     */
    void updateStorageByFid(Long fid,List<FlightStorageDO> storageDOList);

	/**
	 * 多条件查询航班信息
	 * 
	 * @param flightDO
	 * @return java.util.List<FlightDO>
	 */
	List<FlightDO> findFlight(FlightDO flightDO);

	/**
	 * 加载查询航班信息，包括某一天的库存信息
	 * 
	 * @param flightId
	 * @return com.xtx.air.dataobject.FlightDO
	 */
	FlightDO getFlight(Long flightId, String boarding_date);

    /**
     * 给定航班号，出发和到达城市，查询对应的航班
     * @param num
     * @param startCity
     * @param endCity
     * @return
     */
    FlightDO getFlight(String num,String startCity,String endCity);

	/**
	 * 添加航班库存信息
	 * 
	 * @param flightStorageDO
	 */
	boolean addFlightStorage(FlightStorageDO flightStorageDO);

    /**
	 * 添加航班库存信息
	 *
	 * @param flightStorageList
	 */
	void addFlightStorage(List<FlightStorageDO> flightStorageList);

	/**
	 * 更新航班库存信息
	 * 
	 * @param flightStorageDO
	 */
	boolean updateFlightStorage(FlightStorageDO flightStorageDO);

	/**
	 * 查询一个航班的所有库存信息
	 * 
	 * @param flightId 航班ID
	 * @return java.util.List<FlightStorageDO>
	 */
	List<FlightStorageDO> findFlightStorage(Long flightId);

	/**
	 * 查询一个航班的所有库存信息
	 *
	 * @param boarding_date
	 * @param flightId
	 * @return java.util.List<FlightStorageDO>
	 */
	List<FlightStorageDO> findFlightStorage(Long flightId, String boarding_date);

	/**
	 * 查询出发城市到到达城市一段时间内的库存信息<br/>
	 * 当start_date等于end_date时，查询的是某天的库存信息<br/>
	 * 
	 * @param start_city 出发城市
	 * @param end_city 到达城市
	 * @param start_date 开始时间
	 * @param end_date 结束时间
	 * @return java.util.Map<String, java.util.List<FlightDO>>
	 */
	Map<String, List<FlightDO>> findFlightStorage(String start_city, String end_city, String start_date, String end_date);

    /**
     * 根据库存创建者查询对应的航班
     * @param flightStorageDO
     * @return
     */
    List<FlightDO> findFlightByStorageCreator(FlightStorageDO flightStorageDO);
}